package com.micro.modual.controller;

import com.micro.core.resp.RespJson;
import com.micro.core.resp.RespJsonData;
import com.micro.core.resp.RespJsonPageData;
import com.micro.modual.entity.SystemMenu;
import com.micro.modual.model.bo.systemmenu.MenuStatusBO;
import com.micro.modual.model.bo.systemmenu.SystemMenuBO;
import com.micro.modual.model.dto.systemmenu.SystemMenuDetailDTO;
import com.micro.modual.model.dto.systemmenu.SystemMenuListDTO;
import com.micro.modual.model.tree.MenuTreeDTO;
import com.micro.modual.model.tree.SystemMenuTreeDTO;
import com.micro.modual.service.SystemMenuService;
import com.micro.plugins.jwt.annotation.IgnoreUserAuth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.*;

import java.util.List;
import java.util.Map;

/**
 * <h1>系统菜单表 控制器</h1>
 * @author levelcoder
 * @version V1.0.0
 * @email LevelCoder@126.com
 * @date 2020-08-04 00:27:46
 */
@Api(value = "菜单管理",tags = "菜单管理")
@RestController
@RequestMapping(value = "systemMenu")
public class SystemMenuController {

    @Autowired
    private SystemMenuService systemMenuService;

    /**
     * <h2>查找系统菜单表 列表</h2>
     * @param params 列表查询请求对象
     * @return List<SystemMenuListDTO> {@link SystemMenuListDTO}s  系统菜单表 列表返回对象
     */
    @ApiOperation(value = "查询系统菜单表列表" ,notes = "查询系统菜单表列表")
    @GetMapping(value = "/findSystemMenuList")
    public RespJsonData<List<SystemMenuTreeDTO>> findSystemMenuList(@RequestParam  Map<String,Object> params){
        return systemMenuService.findSystemMenuList(params);
    }

    /**
     * <h2>根据主键编号查看系统菜单表详情</h2>
     * @param id  系统菜单表 主键编号
     * @return {@link SystemMenuDetailDTO}  系统菜单表 详情
     */
    @ApiOperation(value = "查询系统菜单表详情",notes = "根据主键编号，查询系统菜单表详情")
    @GetMapping(value = "/findSystemMenuDetail/{id}")
    public RespJsonData<SystemMenuDetailDTO> findSystemMenuDetail(@PathVariable("id") Long id){
        return systemMenuService.findDetail(id,SystemMenuDetailDTO.class);
    }

    /**
     * <h2>新增系统菜单表详情</h2>
     * @param systemMenuBO {@link SystemMenuBO} 系统菜单表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "新增系统菜单表",notes = "新增系统菜单表")
    @PostMapping(value = "/addSystemMenu")
    public RespJson addSystemMenu(@RequestBody SystemMenuBO systemMenuBO){
        return systemMenuService.addSystemMenu(systemMenuBO);
    }

    /**
     * <h2>修改系统菜单表详情</h2>
     * @param systemMenuBO  {@link SystemMenuBO} 系统菜单表 新增/修改 请求对象
     * @return {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "修改系统菜单表",notes = "修改系统菜单表")
    @PostMapping(value = "/editSystemMenu")
    public RespJson editSystemMenu(@RequestBody SystemMenuBO systemMenuBO){
        return systemMenuService.editSystemMenu(systemMenuBO);
    }

    /**
     * <h2>根据主键编号删除系统菜单表信息</h2>
     * @param id  系统菜单表 主键编号
     * @return  {@link RespJson} 返回结果基础类
     */
    @ApiOperation(value = "删除系统菜单表",notes = "根据地址ID，删除系统菜单表")
    @PostMapping(value = "/deleteSystemMenu/{id}")
    public RespJson deleteSystemMenu(@PathVariable("id") Long id){
        return systemMenuService.deleteSystemMenu(id);
    }

    /**
     * <h2>修改菜单状态</h2>
     * @param menuStatusBO {@link MenuStatusBO} 菜单状态请求对象
     * @return
     */
    @ApiOperation(value = "修改菜单状态",notes = "修改菜单状态")
    @PostMapping(value = "/modifyMenuStatus")
    public RespJson modifyMenuStatus(@RequestBody MenuStatusBO menuStatusBO){
        return systemMenuService.modifyMenuStatus(menuStatusBO);
    }

    /**
     * <h2>获取所有菜单树信息</h2>
     * @return
     */
    @ApiOperation(value = "获取所有菜单树信息",notes = "获取所有菜单树信息")
    @GetMapping(value = "/findMenuTree")
    public RespJsonData<List<MenuTreeDTO>> findMenuTree(@RequestParam Map<String,Object> map){
        return systemMenuService.findMenuTree(map);
    }

    /**
     * <h2>查询所有菜单信息</h2>
     * @return {@link SystemMenu} s 菜单
     */
    @GetMapping(value = "/findAllMenu")
    public RespJsonData<List<SystemMenu>> findAllMenu(){
        return systemMenuService.findAllMenu();
    }

    /**
     * <h2>校验菜单是否存在</h2>
     * @param menuName 菜单名称
     * @return
     */
    @PostMapping(value = "/validataMenuExist/{menuName}")
    public RespJson validataMenuExist(@PathVariable("menuName") String menuName){
        return systemMenuService.validataMenuExist(menuName);
    }
}

